package com.zmxstudy.gzu.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zmxstudy.gzu.domain.TbSpec;
import com.zmxstudy.gzu.domain.TbTemplate;
import com.zmxstudy.gzu.mapper.TbSpecMapper;
import com.zmxstudy.gzu.mapper.TbTemplateMapper;
import com.zmxstudy.gzu.utils.ProductCodeMsg;
import com.zmxstudy.gzu.utils.Result;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Tag(name = "模板管理")
@RestController
@RequestMapping("/product-service/templates")
@SuppressWarnings("rawtypes")
public class TemplateController {

    @Resource
    TbTemplateMapper tbTemplateMapper;
    @Resource
    TbSpecMapper tbSpecMapper;

    @Operation(summary = "查询所有")
    @GetMapping()
    Result<List<TbTemplate>> findTbSpec() {
        List<TbTemplate> list = tbTemplateMapper.selectList(null);
        return Result.success("查询成功", list);
    }


    /**
     * 添加模板
     */
    @Operation(summary = "添加模板")
    @PostMapping
    public Result addTemplate(@RequestBody TbTemplate tbTemplate) {
        if (tbTemplate.getName() == null) {
            return Result.error(ProductCodeMsg.Template_error1);
        }

        LambdaQueryWrapper<TbTemplate> laq = new LambdaQueryWrapper<>();
        laq.eq(TbTemplate::getName, tbTemplate.getName());
        TbTemplate tp = tbTemplateMapper.selectOne(laq);

        if (tp != null) {
            return Result.error(ProductCodeMsg.ADDTemplate_error);
        }

        tbTemplateMapper.insert(tbTemplate);
        return Result.success();
    }

    /**
     * 删除模板
     */
    @Operation(summary = "删除模板")
    @DeleteMapping("/{id}")
    public Result deleteTemplate(@PathVariable Long id) {
        TbTemplate tbTemplate = tbTemplateMapper.selectById(id);

        LambdaQueryWrapper<TbSpec> laq = new LambdaQueryWrapper<>();
        laq.eq(TbSpec::getTemplateId, tbTemplate.getId());
        List<TbSpec> list = tbSpecMapper.selectList(laq);


        if (list.size() > 0) {
            return Result.error(ProductCodeMsg.DELETETemplate_error);
        }
        tbTemplateMapper.deleteById(tbTemplate);

        return Result.success();
    }


    /**
     * 修改模板
     */
    @Operation(summary = "修改模板")
    @PutMapping
    public Result updateTemplate(@RequestBody TbTemplate tbTemplate) {
        if (tbTemplate.getName() == null) {
            return Result.error(ProductCodeMsg.Template_error1);
        }

        TbTemplate tb = tbTemplateMapper.selectById(tbTemplate.getId());
        if (tb.getName().equals(tbTemplate.getName())) {
            tbTemplateMapper.updateById(tbTemplate);
            return Result.success();
        }

        LambdaQueryWrapper<TbTemplate> laq = new LambdaQueryWrapper<>();
        laq.eq(TbTemplate::getName, tbTemplate.getName());
        TbTemplate tp = tbTemplateMapper.selectOne(laq);

        if (tp != null) {
            return Result.error(ProductCodeMsg.ADDTemplate_error);
        }

        tbTemplateMapper.updateById(tbTemplate);
        return Result.success();
    }

    /**
     * 查询模板详情
     */
    @Operation(summary = "根据模板名称查询模板")
    @GetMapping("/{name}")
    public Result<List<TbSpec>> findTemplate(@PathVariable String name) {
        LambdaQueryWrapper<TbTemplate> laq = new LambdaQueryWrapper<>();
        laq.eq(TbTemplate::getName, name);
        TbTemplate tbTemplate = tbTemplateMapper.selectOne(laq);

        if (tbTemplate == null) {
            return Result.error(ProductCodeMsg.ADD_error);
        }
        int id = tbTemplate.getId();
        LambdaQueryWrapper<TbSpec> Spec = new LambdaQueryWrapper<>();
        Spec.eq(TbSpec::getTemplateId, id);
        List<TbSpec> list = tbSpecMapper.selectList(Spec);

        return Result.success("模板查询成功", list);
    }

}
